//////////////////////////////////////////////////////////////////////////////
// Project...: drax
// File......: TimeSpanEx.cpp
// Date......: 21.11.2008
// Author....: Stephan Arlt
//////////////////////////////////////////////////////////////////////////////

#include "StdAfx.h"
#include "TimeSpanEx.h"

#define SCALE_HOURS        (1000 * 60 * 60)
#define SCALE_MINUTES      (1000 * 60)
#define SCALE_SECONDS      (1000)
#define SCALE_MILLISECONDS (1)

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
CTimeSpanEx::CTimeSpanEx() : m_iMilliseconds(0)
{
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
CTimeSpanEx::CTimeSpanEx(const CString &psTimeSpanEx)
{
	FromString(psTimeSpanEx);
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
CTimeSpanEx::~CTimeSpanEx()
{
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
unsigned int CTimeSpanEx::GetHours()
{
	return m_iMilliseconds / SCALE_HOURS;
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
unsigned int CTimeSpanEx::GetMinutes()
{
	return (m_iMilliseconds % SCALE_HOURS) / SCALE_MINUTES;
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
unsigned int CTimeSpanEx::GetSeconds()
{
	return (m_iMilliseconds % SCALE_HOURS % SCALE_MINUTES) / SCALE_SECONDS;
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
unsigned int CTimeSpanEx::GetMilliseconds()
{
	return (m_iMilliseconds % SCALE_HOURS % SCALE_MINUTES % SCALE_SECONDS) / SCALE_MILLISECONDS;
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
void CTimeSpanEx::FromString(const CString &psTimeSpanEx)
{
	m_iMilliseconds = (AfxStringToInt(psTimeSpanEx.Mid(0, 2)) * SCALE_HOURS) +
					  (AfxStringToInt(psTimeSpanEx.Mid(3, 2)) * SCALE_MINUTES) +
					  (AfxStringToInt(psTimeSpanEx.Mid(6, 2)) * SCALE_SECONDS) +
					  (AfxStringToInt(psTimeSpanEx.Mid(9, 3)) * SCALE_MILLISECONDS);
}

//////////////////////////////////////////////////////////////////////////////
// 
//////////////////////////////////////////////////////////////////////////////
CString CTimeSpanEx::ToString()
{
	CString lsString;
	lsString.Format(_T("%02d:%02d:%02d.%03d"), GetHours(), GetMinutes(), GetSeconds(), GetMilliseconds());
	return lsString;
}
